package veterinaria.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import veterinaria.excepcion.DAOExcepcion;
import veterinaria.modelo.AtencionMedica;
import veterinaria.util.ConexionBD;

public class AtencionMedicaDAO extends BaseDAO{
	
	public AtencionMedica insertar(AtencionMedica vo) throws DAOExcepcion {
		String query = "insert into AtencionMedica(idAtencionMedica,Doctor_idDoctor,Paciente_idPaciente1,dsNotasMedicas,dsImagenes,dsCondespec, stActivo) values (?,?,?,?,?,?,?)";
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, vo.getIdAtencionMedica() );
			stmt.setInt(2, vo.getDoctor_idDoctor());
			stmt.setInt(3, vo.getPaciente_idPaciente1());
			stmt.setString(4,vo.getDsNotasMedicas());
			stmt.setString(5,vo.getDsimagenes());
			stmt.setString(6,vo.getDsCondEspec());
			stmt.setString(7,vo.getStActivo());
						
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
			// Obtener el ultimo id			
			int id = 0;
			query = "select last_insert_id()";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			if (rs.next()) {
				id = rs.getInt(1);
			}
			vo.setIdAtencionMedica(id);
			// estoy guardando el Id generado

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	
	}	
	
	public AtencionMedica actualizar(AtencionMedica vo) throws DAOExcepcion {
		String query = "update atencionmedica set dsnotasmedicas=?,dsimagenes=?,dsCondEspec=?, stActivo=?  where idatencionmedica=?";
		

		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1,vo.getDsNotasMedicas());
			stmt.setString(2,vo.getDsimagenes());
			stmt.setString(3,vo.getDsCondEspec());	
			stmt.setString(4, vo.getStActivo());
			stmt.setInt(5,vo.getIdAtencionMedica());
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo actualizar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}
	
	public void eliminar(int idatencionMedica) throws DAOExcepcion {
		String query = "update Atencionmedica set stactivo = 0 WHERE idatencionmedica=?";
		//String query = "delete from atencionmedica WHERE idatencionmedica=?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, idatencionMedica);			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo eliminar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}
	
	public AtencionMedica obtener(int idatencionmedica) throws DAOExcepcion {
		AtencionMedica vo = new AtencionMedica();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			String query = "select idAtencionMedica, Doctor_idDoctor, Paciente_idPaciente1,dsNotasMedicas,dsImagenes,dsCondEspec from AtencionMedica where stActivo='1' and idatencionmedica=?";
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1,idatencionmedica);
			rs = stmt.executeQuery();
			if (rs.next()) {
				vo.setIdAtencionMedica(rs.getInt(1));
				vo.setDoctor_idDoctor(rs.getInt(2));
				vo.setPaciente_idPaciente1(rs.getInt(3));
				vo.setDsNotasMedicas(rs.getString(4));
				vo.setDsimagenes(rs.getString(5));
				vo.setDsCondEspec(rs.getString(6));				
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}
	
	public Collection<AtencionMedica> listar() throws DAOExcepcion {
		Collection<AtencionMedica> c = new ArrayList<AtencionMedica>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			String query = "select idatencionmedica,Doctor_idDoctor,Paciente_idpaciente1,dsNotasMedicas,dsImagenes,dsCondEspec from AtencionMedica where stActivo='1' order by idAtencionMedica";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			while (rs.next()) {
				AtencionMedica vo = new AtencionMedica();
				vo.setIdAtencionMedica(rs.getInt("idAtencionMedica"));
				vo.setDoctor_idDoctor(rs.getInt("doctor_idDoctor"));
				vo.setPaciente_idPaciente1(rs.getInt("Paciente_idPaciente1"));
				vo.setDsNotasMedicas(rs.getString("dsNotasMedicas"));
				vo.setDsimagenes(rs.getString("dsimagenes"));
				vo.setDsCondEspec(rs.getString("dsCondEspec"));
				c.add(vo);
			}

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return c;
	}

	
}
